package action.chap2;

import java.util.Arrays;
import java.util.List;

/**
 * 在软件工程中，一个众所周知的问题就是，不管做什么，用户的需求肯定会变。
 * 如何应对这样不断变化的需求？理想的状态下，应该把的工作量降到最少。此外，类似的新功能实现起来还应该很简单，而且易于长期维护。
 * 行为参数化就是可以帮助处理频繁变更的需求的一种软件开发模式。一言以蔽之，它意味着拿出一个代码块，把它准备好却不去执行它。
 * 这个代码块以后可以被程序的其他部分调用，这意味着可以推迟这块代码的执行。
 * <p>
 * 行为参数化传递代码
 */
public class ComparatorApple {

    public static void main(String[] args) {
        List<FilteringApples.Apple> inventory = Arrays.asList(
                new FilteringApples.Apple(80, "green"),
                new FilteringApples.Apple(155, "green"),
                new FilteringApples.Apple(120, "red"));

        inventory.sort((o1, o2) -> o1.getWeight() - o2.getWeight());

        System.out.println(inventory);

        Runnable r1 = () -> System.out.println("hello1");

        Runnable r2 = () -> {
            System.out.println("hello2");
        };

        process(r1);
        process(r2);
        process(() -> System.out.println("aaaaa"));
    }

    public static void process(Runnable r) {
        r.run();
    }


}
